#ifndef _HEAD_H
#define _HEAD_H

#include"header.h"
#include <openssl/md5.h>


enum command
{
    ls,//0开始，依次递增
    cd,
    pwd,
    download,
    upload,
    rm,
    cdir
};
//自定义协议
//用于管理传递给服务器的信息
//op是整型，用于表示传递的操作类型
//path表示命令后传递的参数
typedef struct train_t 
{
    enum command op;
    char path[200];
}train_t;

//用户信息结构体，用于存储用户名和密码
typedef struct user_s
{
    int flag;
    char user_name[100];
    char password[100];

}user;


int function_select(int *socket_fd,char* port,char* ip,struct user_s* user);
//用与完成命令分割操作
//buf用于存储从输入缓冲区读取的数据
//command_data用于传入传出，获取分割命令后的命令类型和传递的参数
int cmd_split(char*buf,train_t* command_data);


//用于解析命令，判断命令本身是否有效
int cmd_analyse(int socket_fd,train_t command_data,char* cur_path);

//用于初始化套接字
//socket_fd用于传入传出，获取文件描述符
//port传递端口，ip传递ip地址
//与服务器连接
int socket_init(int*socket_fd,char*port,char*ip);

//用于将所需要的文件描述符加入监听队列中
//epoll_fd表示epoll类型的fd,fd表示需要加入监听队列的文件
int epolladd(int epoll_fd,int fd);

//用于实现客户端的ls操作
int client_ls(int socket_fd);
//用于实现客户端的cd操作
int client_cd(int socket_fd,char*cur_path,char*arg);
//用于实现客户端的pwd操作
int client_pwd(char*cur_path);
//用于实现客户端的mkdir操作
int client_cdir(int socket_fd,char*cur_path);
//用于实现客户端上传文件的操作
int client_upload(int socket_fd,char*cur_path);
//用于实现客户端下载文件的操作
int client_download(int socket_fd,char*cur_path);
//用于执行文件删除操作
int client_rm(int socket_fd,char*cur_path);
//用于读取配置文件
int read_config(const char*file_name,char*port,char*ip);
//用户登录操作
int client_login(int socket_fd,user*user);

#endif

